@CLASS
appCore

@USE
pf/types/pfClass.p
pf/tests/pfAssert.p

@BASE
pfClass

@create[aOptions]          
## aOptions.options
  ^pfAssert:isTrue($aOptions.sql is pfSQL)[SQL-объект должен быть наследником pfSQL.]
  ^BASE:create[]

  $_options[$aOptions.options]
  $_sql[$aOptions.sql]

  $_modules[^hash::create[]]
  ^addModule[module;appCoreModule]   

@GET_CSQL[]
  $result[$_sql]

@addModule[aModuleName;aClassName]
  $_modules.[$aModuleName][$.className[$aClassName] $.object[]]

@GET_DEFAULT[aName]
  $result[]
  ^if(^_modules.contains[$aName]){
    ^if(!def $_modules.[$aName].object){
      $_modules.[$aName].object[^_coreFabric[$_modules.[$aName].className]] 
    } 
    $result[$_modules.[$aName].object]
  }
      
@_coreFabric[aClass]
  ^use[core/${aClass}.p]   
  $result[^reflection:create[$aClass;create;$.core[$self] $.options[$_options]]]
